﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProjetoJornada_DAL.Repositorio;
using Basicas;
using Basicas.Utils;
using Basicas.Utils.excecoes;

namespace ProjetoJornada_Negocios.Negocio
{
    public class NegocioDesconto
    {
        RepDesconto repDesconto;

        public NegocioDesconto()
        {
            this.repDesconto = new RepDesconto();
        }

        public Int32 InserirDesconto(Desconto desconto)
        {
            Int32 idDesconto = 0;
            try
            {
                idDesconto = this.repDesconto.InserirDesconto(desconto);
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "inserirDesconto");
                throw ex;
            }
            return idDesconto;
        }

        public Boolean RemoverDesconto(Int32 idDesconto)
        {
            Boolean retorno = true;
            try
            {
                if (this.ExisteDescontoPorId(idDesconto))
                {
                    this.repDesconto.RemoverDesconto(idDesconto);
                }
                else
                {                    
                    throw new DescontoInexistenteException();
                }
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "removerDescontoNegocio");
                throw ex;
            }
            return retorno;
        }

        public Boolean EditarDesconto(Desconto desconto)
        {
            Boolean retorno = false;
            try
            {
                retorno = this.repDesconto.EditarDesconto(desconto);
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "inserirDesconto");
                throw ex;
            }
            return retorno;
        }

        public Desconto ConsultarDescontoPorId(Int32 idDesconto)
        {
            Desconto desconto = this.repDesconto.ConsultarDescontoPorId(idDesconto);
            if (desconto == null)
            {
                throw new DescontoInexistenteException();
            }
            else
            {
                return desconto;
            }
        }

        private Boolean ExisteDescontoPorId(Int32 idDesconto)
        {
            Boolean existe = true;
            Desconto desconto = this.repDesconto.ConsultarDescontoPorId(idDesconto);

            if (desconto == null)
            {
                existe = false;
            }
            return existe;
        }

        public List<Desconto> ConsultarTodsDescontos()
        {
            List<Desconto> descontos = this.repDesconto.ConsultarTodsDescontos();
            if (descontos == null)
            {
                throw new DescontosInexistentesException();
            }
            else
            {
                return descontos;
            }
        }
    }
}
